#ifndef PROFILE_PROFILEDATA_H
#define PROFILE_PROFILEDATA_H

#include <QMetaType>
#include <QSet>
#include <QString>


namespace Profile {

class ProfileData
{
public:
    ProfileData();
    ProfileData(qint64 memberId,
                const QString &fullName,
                const QString &displayName,
                const QString &firstName,
                const QString &lastName,
                const QString &birthday,
                int gender,
                const QString &messageStatus,
                QList<QString> phoneList,
                const QString &email,
                const QString &profileUrl,
                const QString &avatarUrl,
                const QString &googleId,
                const QString &yahooId,
                const QString &city);
    ProfileData(const ProfileData &copyMe);
    ~ProfileData();

private:
    qint64 m_memberId;
    QString m_fullName;
    QString m_displayName;
    QString m_firstName;
    QString m_lastName;
    QString m_birthday;
    int m_gender;
    QString m_messageStatus;
    QList<QString> m_phoneList;
    QString m_email;
    QString m_profileUrl;
    QString m_avatarUrl;
    QString m_googleId;
    QString m_yahooId;
    QString m_city;

public:
    ProfileData &operator = (const ProfileData &profile);

public:
    inline void setMemberId(qint64 id) {
        m_memberId = id;
    }

    inline qint64 memberId() const {
        return m_memberId;
    }

    inline void setFullName(const QString &text) {
        m_fullName = text;
    }

    inline const QString &fullName() const {
        return m_fullName;
    }

    inline void setDisplayName(const QString &displayName) {
        m_displayName = displayName;
    }

    inline const QString &displayName() const {
        return m_displayName;
    }

    inline void setFirstName(const QString &firstName) {
        m_firstName = firstName;
    }

    inline const QString &firstName() const {
        return m_firstName;
    }

    inline void setLastName(const QString &lastName) {
        m_lastName = lastName;
    }

    inline const QString &lastName() const {
        return m_lastName;
    }

    inline void setMessageStatus(const QString &messageStatus) {
        m_messageStatus = messageStatus;
    }

    inline const QString &messageStatus() const {
        return m_messageStatus;
    }

    inline void setEmail(const QString &email) {
        m_email = email;
    }

    inline const QString &email() const {
        return m_email;
    }

    inline void setProfileUrl(const QString &profileUrl) {
        m_profileUrl = profileUrl;
    }

    inline const QString &profileUrl() const {
        return m_profileUrl;
    }

    inline void setAvatarUrl(const QString &avatarUrl) {
        m_avatarUrl = avatarUrl;
    }

    inline const QString &avatarUrl() const {
        return m_avatarUrl;
    }

    void setPhones(const QList<QString> &phones);

    void insertPhone(const QString &phone);

    QString phone() const;

    inline const QList<QString> &phones() const {
        return m_phoneList;
    }

    inline void setGender(int gender) {
        m_gender = gender;
    }

    inline int gender() const {
        return m_gender;
    }

    inline void setGoogleId(const QString &googleId) {
        m_googleId = googleId;
    }

    inline const QString &googleId() const {
        return m_googleId;
    }

    inline void setYahooId(const QString &yahooId) {
        m_yahooId = yahooId;
    }

    inline const QString &yahooId() const {
        return m_yahooId;
    }

    inline void setCity(const QString &city) {
        m_city = city;
    }

    inline const QString &city() const {
        return m_city;
    }

    inline void setBirthday(const QString &birthday) {
        m_birthday = birthday;
    }

    inline const QString &birthday() const {
        return m_birthday;
    }
};

} // namespace Profile

Q_DECLARE_METATYPE(Profile::ProfileData)

#endif // PROFILE_PROFILEDATA_H
